#include "app.h"
#include "ui\ui_main.h"
#include "lv_port.h"
#include "tss_writer.h"
#include "board.h"
#include "components\lcd_drivers\lcd.h"
#include "components\lvgl\lvgl.h"
#include "polsys.h"

// 定义全局变量

// 空闲（无操作）时间计时
u32 _App_IdleTime = 0;
// 延时关机的时间
static u16 mDelayOffTime = 0;
static bool mDelayOff = false;

// 外部函数声明


// 内部函数声明

static void mAppTimer();


// 内部变量

static polsys_task_t mTimer100ms;



void App_SetDelayOff(u16 time)
{
    if(time == 0) mDelayOff = false;
    else
    {
        mDelayOff = true;
        mDelayOffTime = time;
    }
}


// 启动事件，程序启动时执行一次
void App_Load()
{
    Board_Init();

    lv_init();      // 先调用 lv_init
    Lcd_Init();     // 再初始化显示驱动程序
    LvPort_Init();    // 在 LVGL 中注册显示和输入设备驱动程序

    TW_Init();
    Keyboard_Init();

    Ui_Init();

    Polsys_TaskInit(&mTimer100ms, mAppTimer, 100 / POLSYS_TICK_CYCLE);
}

// 这里处理全局事件，页面内部处理与页面相关的事件

// 100ms执行一次
static void mAppTimer()
{
    // 空闲自动关机处理
    if(Board_GetDcIn())_App_IdleTime=0;
    if(_App_IdleTime < APP_AUTO_OFF_TIME)_App_IdleTime += 100;    // 达到10分钟空闲后关机
    else
    {
        if(!Board_GetDcIn())
        {
            Board_Sleep();  // 可能是异步处理会返回
            _App_IdleTime = 0;
        }
    }
    // 延时关机处理
    if(mDelayOff)
    {
        if(mDelayOffTime > 100) mDelayOffTime -= 100;
        else
        {
            Board_Sleep();  // 可能是异步处理会返回
            mDelayOff = false;
        }
    }
}





